module utils.MyJwt;

import std.json;

import hunt.jwt.JwtToken;
import hunt.jwt.JwtAlgorithm;

import utils.ConstValue : Const;

class MyJwt
{
    /** 
     * 生成token方法
     * Params:
     *   userData    JSONValue
     * Returns: string
     */
    public static string createToken(JSONValue userData)
    {
        import std.format : format;
        import std.datetime.systime : Clock;

        JwtToken token = new JwtToken(JwtAlgorithm.HS256);
        string iis = "tingyu";
        long now = Clock.currTime.toUnixTime();
        string jit = format("%s%s", iis, now);
        token.claims.iss = iis;
        token.claims.iat = now;
        token.claims.exp = now + 7200;
        token.claims.jit = jit;
        token.claims.set("user", userData);
        return token.encode(Const.jwtSecretStr);
    }

    /** 
     * 校验token方法
     * Params:
     *   token = token字符串
     * Returns: bool
     */
    public static bool validateToken(string token)
    {
        return JwtToken.verify(token, Const.jwtSecretStr);
    }

    /** 
     * 解析token方法
     * Params:
     *   token = token字符串
     * Returns: JwtToken
     */
    public static JwtToken decodeToken(string token)
    {
        return JwtToken.decode(token, Const.jwtSecretStr);
    }

}
